package com.cc.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

//注解
@Component//定义为组件，交由Spring管理
//切面
@Aspect//设置当前类为Aop切面类
public class MyAdvice {
    //定义切入点
//    @Pointcut("execution(void com.cc.service.Impl.BookyServiceImpl.addBook(..))")
    @Pointcut("execution(* com.cc.service.Impl.*.*(..))")
    private void pt() {}
    //制定切面
    //绑定切入点与通知关系，并指定通知添加到原始连接点的具体执行位置
//    @Before("pt()")
//    public void before(){
//    }
    @Before("pt()")
    public void beforeMethod(JoinPoint joinPoint){
        System.out.println("Aop开始时间:"+System.currentTimeMillis());
        System.out.println("当前调用的类是："+joinPoint.getTarget()+"--"+
                "调用的方法是:"+joinPoint.getSignature().getName()+"----");
        System.out.println("传递的参数:");
        List<Object> list = Arrays.asList(joinPoint.getArgs());
        list.stream().forEach(o -> System.out.println(o));
    }
    @After("pt()")
    public void after(){
        System.out.println("Aop结束时间:"+System.currentTimeMillis());
    }
}

